{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "65d4dc6b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# tf2.0版本 \n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "\n",
    "# tf.disable_eager_execution()         #可以用于从TensorFlow 1.x到2.x的复杂迁移项目的程序开头\n",
    "\n",
    "np.random.seed(5)#生成一个写日志的writer,并将当前的tensorflow计算图写入日志\n",
    "logdir = './log/ex1'\n",
    "writer = tf.summary.create_file_writer(logdir)\n",
    "tf.summary.trace_on(graph=True, profiler=True)  # 开启Trace，可以记录图结构和profile信息\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f357de7a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 区间变换,[0,100]化为[-1,1]\n",
    "def Convert(data,Min,Max,size):\n",
    "    # data：需要变换的数据或矩阵\n",
    "    # Min：最小值        \n",
    "    # Max：最大值\n",
    "    #size:样本个数\n",
    "    data = np.array(data)\n",
    "    Size = size\n",
    "    w = -2/(Min - Max)\n",
    "    b = (Min + Max)/(Min - Max)\n",
    "    for i in range(Size):\n",
    "        data[i] = data[i]*w + b\n",
    "    return data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "37eb66bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "#等差数列生成 符合题目要求:1.生成 x_data，值为 [0, 100]之间500个等差数列数据集合作为样本特征\n",
    "x_data = np.linspace(0,100,500) # 这个linspace 别打错了\n",
    "x_data=Convert(x_data,0,100,500)#数据归一化\n",
    "a = 3.1234\n",
    "b = 2.98\n",
    "#根据目标线性方程 y=3.1234*x+2.98，生成相应的标签集合 y_data，1分；\n",
    "y = a * x_data + b\n",
    "y_data = a * x_data + b+ np.random.randn(*x_data.shape) * 0.4 #0.4噪声 视频要求 题目没要求\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5921a482",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1ad03491a48>]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#2.画出随机生成数据的散点图和想要通过学习得到的目标线性函数 y=3.1234*x+2.98\n",
    "plt.scatter(x_data,y_data)\n",
    "plt.plot(x_data,y,color='r',linewidth=2)\n",
    "#help(plt.plor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "6dbb41b2",
   "metadata": {},
   "outputs": [],
   "source": [
    "#构建模型 3.构建回归模型\n",
    "\n",
    "def model(x,w,b):\n",
    "    return tf.multiply(x,w)+b\n",
    "\n",
    "w = tf.Variable(np.random.randn(),tf.float32) # 去了名字 加了数据类型\n",
    "b = tf.Variable(0.0,tf.float32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "80b8049c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 损失函数模型\n",
    "def loss(x,y,w,b):\n",
    "    err = model (x,w,b) -y\n",
    "    squared_err = tf.square(err)\n",
    "    return tf.reduce_mean(squared_err)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "538c4b25",
   "metadata": {},
   "outputs": [],
   "source": [
    "#参数\n",
    "\n",
    "#训练模型，10轮，每训练20个样本显示损失值\n",
    "train_epochs = 10\n",
    "learning_rate = 0.01"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "735abf08",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 梯度\n",
    "def grad(x,y,w,b):\n",
    "    # tf.GradientTape() tf2 1 区别 梯度带\n",
    "    with tf.GradientTape() as tape:\n",
    "        loss_ =loss(x,y,w,b) # 不需要优化器\n",
    "    return tape.gradient(loss_,[w,b])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "a26f7f0d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Epoch: 01 Step:020 loss:0.673401\n",
      "Train Epoch: 01 Step:040 loss:1.050885\n",
      "Train Epoch: 01 Step:060 loss:0.115097\n",
      "Train Epoch: 01 Step:080 loss:0.060810\n",
      "Train Epoch: 01 Step:100 loss:0.301238\n",
      "Train Epoch: 01 Step:120 loss:0.142188\n",
      "Train Epoch: 01 Step:140 loss:1.037130\n",
      "Train Epoch: 01 Step:160 loss:0.200668\n",
      "Train Epoch: 01 Step:180 loss:0.024176\n",
      "Train Epoch: 01 Step:200 loss:0.593344\n",
      "Train Epoch: 01 Step:220 loss:0.020831\n",
      "Train Epoch: 01 Step:240 loss:0.012264\n",
      "Train Epoch: 01 Step:260 loss:0.381503\n",
      "Train Epoch: 01 Step:280 loss:0.091511\n",
      "Train Epoch: 01 Step:300 loss:0.207207\n",
      "Train Epoch: 01 Step:320 loss:0.125631\n",
      "Train Epoch: 01 Step:340 loss:0.066795\n",
      "Train Epoch: 01 Step:360 loss:0.102405\n",
      "Train Epoch: 01 Step:380 loss:0.010901\n",
      "Train Epoch: 01 Step:400 loss:0.780505\n",
      "Train Epoch: 01 Step:420 loss:0.002678\n",
      "Train Epoch: 01 Step:440 loss:0.055118\n",
      "Train Epoch: 01 Step:460 loss:0.052850\n",
      "Train Epoch: 01 Step:480 loss:0.048847\n",
      "Train Epoch: 01 Step:500 loss:0.369717\n",
      "Train Epoch: 02 Step:520 loss:2.473912\n",
      "Train Epoch: 02 Step:540 loss:0.051028\n",
      "Train Epoch: 02 Step:560 loss:0.178133\n",
      "Train Epoch: 02 Step:580 loss:0.090846\n",
      "Train Epoch: 02 Step:600 loss:0.008096\n",
      "Train Epoch: 02 Step:620 loss:0.002669\n",
      "Train Epoch: 02 Step:640 loss:0.348603\n",
      "Train Epoch: 02 Step:660 loss:0.000034\n",
      "Train Epoch: 02 Step:680 loss:0.094951\n",
      "Train Epoch: 02 Step:700 loss:0.079824\n",
      "Train Epoch: 02 Step:720 loss:0.134705\n",
      "Train Epoch: 02 Step:740 loss:0.177371\n",
      "Train Epoch: 02 Step:760 loss:0.004948\n",
      "Train Epoch: 02 Step:780 loss:0.064187\n",
      "Train Epoch: 02 Step:800 loss:0.010209\n",
      "Train Epoch: 02 Step:820 loss:0.037347\n",
      "Train Epoch: 02 Step:840 loss:0.073820\n",
      "Train Epoch: 02 Step:860 loss:0.033926\n",
      "Train Epoch: 02 Step:880 loss:0.134499\n",
      "Train Epoch: 02 Step:900 loss:0.203072\n",
      "Train Epoch: 02 Step:920 loss:0.196366\n",
      "Train Epoch: 02 Step:940 loss:0.013047\n",
      "Train Epoch: 02 Step:960 loss:0.006044\n",
      "Train Epoch: 02 Step:980 loss:0.002287\n",
      "Train Epoch: 02 Step:1000 loss:0.140193\n",
      "Train Epoch: 03 Step:1020 loss:0.004301\n",
      "Train Epoch: 03 Step:1040 loss:0.274909\n",
      "Train Epoch: 03 Step:1060 loss:0.004346\n",
      "Train Epoch: 03 Step:1080 loss:0.017203\n",
      "Train Epoch: 03 Step:1100 loss:0.027891\n",
      "Train Epoch: 03 Step:1120 loss:0.000598\n",
      "Train Epoch: 03 Step:1140 loss:0.347083\n",
      "Train Epoch: 03 Step:1160 loss:0.000169\n",
      "Train Epoch: 03 Step:1180 loss:0.114608\n",
      "Train Epoch: 03 Step:1200 loss:0.059537\n",
      "Train Epoch: 03 Step:1220 loss:0.169325\n",
      "Train Epoch: 03 Step:1240 loss:0.220886\n",
      "Train Epoch: 03 Step:1260 loss:0.000340\n",
      "Train Epoch: 03 Step:1280 loss:0.094324\n",
      "Train Epoch: 03 Step:1300 loss:0.024193\n",
      "Train Epoch: 03 Step:1320 loss:0.061195\n",
      "Train Epoch: 03 Step:1340 loss:0.105227\n",
      "Train Epoch: 03 Step:1360 loss:0.054989\n",
      "Train Epoch: 03 Step:1380 loss:0.171293\n",
      "Train Epoch: 03 Step:1400 loss:0.165854\n",
      "Train Epoch: 03 Step:1420 loss:0.232722\n",
      "Train Epoch: 03 Step:1440 loss:0.022285\n",
      "Train Epoch: 03 Step:1460 loss:0.011808\n",
      "Train Epoch: 03 Step:1480 loss:0.005603\n",
      "Train Epoch: 03 Step:1500 loss:0.123150\n",
      "Train Epoch: 04 Step:1520 loss:0.053096\n",
      "Train Epoch: 04 Step:1540 loss:0.359756\n",
      "Train Epoch: 04 Step:1560 loss:0.000906\n",
      "Train Epoch: 04 Step:1580 loss:0.013003\n",
      "Train Epoch: 04 Step:1600 loss:0.030540\n",
      "Train Epoch: 04 Step:1620 loss:0.000471\n",
      "Train Epoch: 04 Step:1640 loss:0.346931\n",
      "Train Epoch: 04 Step:1660 loss:0.000222\n",
      "Train Epoch: 04 Step:1680 loss:0.116687\n",
      "Train Epoch: 04 Step:1700 loss:0.057661\n",
      "Train Epoch: 04 Step:1720 loss:0.173026\n",
      "Train Epoch: 04 Step:1740 loss:0.225527\n",
      "Train Epoch: 04 Step:1760 loss:0.000175\n",
      "Train Epoch: 04 Step:1780 loss:0.097675\n",
      "Train Epoch: 04 Step:1800 loss:0.025929\n",
      "Train Epoch: 04 Step:1820 loss:0.063918\n",
      "Train Epoch: 04 Step:1840 loss:0.108694\n",
      "Train Epoch: 04 Step:1860 loss:0.057387\n",
      "Train Epoch: 04 Step:1880 loss:0.175241\n",
      "Train Epoch: 04 Step:1900 loss:0.162318\n",
      "Train Epoch: 04 Step:1920 loss:0.236549\n",
      "Train Epoch: 04 Step:1940 loss:0.023350\n",
      "Train Epoch: 04 Step:1960 loss:0.012494\n",
      "Train Epoch: 04 Step:1980 loss:0.006018\n",
      "Train Epoch: 04 Step:2000 loss:0.121496\n",
      "Train Epoch: 05 Step:2020 loss:0.061012\n",
      "Train Epoch: 05 Step:2040 loss:0.368921\n",
      "Train Epoch: 05 Step:2060 loss:0.000702\n",
      "Train Epoch: 05 Step:2080 loss:0.012613\n",
      "Train Epoch: 05 Step:2100 loss:0.030813\n",
      "Train Epoch: 05 Step:2120 loss:0.000459\n",
      "Train Epoch: 05 Step:2140 loss:0.346916\n",
      "Train Epoch: 05 Step:2160 loss:0.000228\n",
      "Train Epoch: 05 Step:2180 loss:0.116897\n",
      "Train Epoch: 05 Step:2200 loss:0.057474\n",
      "Train Epoch: 05 Step:2220 loss:0.173401\n",
      "Train Epoch: 05 Step:2240 loss:0.225997\n",
      "Train Epoch: 05 Step:2260 loss:0.000161\n",
      "Train Epoch: 05 Step:2280 loss:0.098016\n",
      "Train Epoch: 05 Step:2300 loss:0.026107\n",
      "Train Epoch: 05 Step:2320 loss:0.064196\n",
      "Train Epoch: 05 Step:2340 loss:0.109046\n",
      "Train Epoch: 05 Step:2360 loss:0.057632\n",
      "Train Epoch: 05 Step:2380 loss:0.175641\n",
      "Train Epoch: 05 Step:2400 loss:0.161965\n",
      "Train Epoch: 05 Step:2420 loss:0.236937\n",
      "Train Epoch: 05 Step:2440 loss:0.023458\n",
      "Train Epoch: 05 Step:2460 loss:0.012564\n",
      "Train Epoch: 05 Step:2480 loss:0.006060\n",
      "Train Epoch: 05 Step:2500 loss:0.121330\n",
      "Train Epoch: 06 Step:2520 loss:0.061839\n",
      "Train Epoch: 06 Step:2540 loss:0.369850\n",
      "Train Epoch: 06 Step:2560 loss:0.000683\n",
      "Train Epoch: 06 Step:2580 loss:0.012575\n",
      "Train Epoch: 06 Step:2600 loss:0.030841\n",
      "Train Epoch: 06 Step:2620 loss:0.000458\n",
      "Train Epoch: 06 Step:2640 loss:0.346914\n",
      "Train Epoch: 06 Step:2660 loss:0.000229\n",
      "Train Epoch: 06 Step:2680 loss:0.116919\n",
      "Train Epoch: 06 Step:2700 loss:0.057455\n",
      "Train Epoch: 06 Step:2720 loss:0.173438\n",
      "Train Epoch: 06 Step:2740 loss:0.226044\n",
      "Train Epoch: 06 Step:2760 loss:0.000160\n",
      "Train Epoch: 06 Step:2780 loss:0.098050\n",
      "Train Epoch: 06 Step:2800 loss:0.026124\n",
      "Train Epoch: 06 Step:2820 loss:0.064223\n",
      "Train Epoch: 06 Step:2840 loss:0.109081\n",
      "Train Epoch: 06 Step:2860 loss:0.057656\n",
      "Train Epoch: 06 Step:2880 loss:0.175681\n",
      "Train Epoch: 06 Step:2900 loss:0.161929\n",
      "Train Epoch: 06 Step:2920 loss:0.236975\n",
      "Train Epoch: 06 Step:2940 loss:0.023469\n",
      "Train Epoch: 06 Step:2960 loss:0.012571\n",
      "Train Epoch: 06 Step:2980 loss:0.006065\n",
      "Train Epoch: 06 Step:3000 loss:0.121314\n",
      "Train Epoch: 07 Step:3020 loss:0.061923\n",
      "Train Epoch: 07 Step:3040 loss:0.369944\n",
      "Train Epoch: 07 Step:3060 loss:0.000681\n",
      "Train Epoch: 07 Step:3080 loss:0.012571\n",
      "Train Epoch: 07 Step:3100 loss:0.030843\n",
      "Train Epoch: 07 Step:3120 loss:0.000458\n",
      "Train Epoch: 07 Step:3140 loss:0.346914\n",
      "Train Epoch: 07 Step:3160 loss:0.000229\n",
      "Train Epoch: 07 Step:3180 loss:0.116921\n",
      "Train Epoch: 07 Step:3200 loss:0.057453\n",
      "Train Epoch: 07 Step:3220 loss:0.173442\n",
      "Train Epoch: 07 Step:3240 loss:0.226049\n",
      "Train Epoch: 07 Step:3260 loss:0.000160\n",
      "Train Epoch: 07 Step:3280 loss:0.098054\n",
      "Train Epoch: 07 Step:3300 loss:0.026126\n",
      "Train Epoch: 07 Step:3320 loss:0.064226\n",
      "Train Epoch: 07 Step:3340 loss:0.109085\n",
      "Train Epoch: 07 Step:3360 loss:0.057659\n",
      "Train Epoch: 07 Step:3380 loss:0.175686\n",
      "Train Epoch: 07 Step:3400 loss:0.161925\n",
      "Train Epoch: 07 Step:3420 loss:0.236980\n",
      "Train Epoch: 07 Step:3440 loss:0.023471\n",
      "Train Epoch: 07 Step:3460 loss:0.012572\n",
      "Train Epoch: 07 Step:3480 loss:0.006065\n",
      "Train Epoch: 07 Step:3500 loss:0.121312\n",
      "Train Epoch: 08 Step:3520 loss:0.061932\n",
      "Train Epoch: 08 Step:3540 loss:0.369954\n",
      "Train Epoch: 08 Step:3560 loss:0.000681\n",
      "Train Epoch: 08 Step:3580 loss:0.012570\n",
      "Train Epoch: 08 Step:3600 loss:0.030844\n",
      "Train Epoch: 08 Step:3620 loss:0.000458\n",
      "Train Epoch: 08 Step:3640 loss:0.346914\n",
      "Train Epoch: 08 Step:3660 loss:0.000229\n",
      "Train Epoch: 08 Step:3680 loss:0.116922\n",
      "Train Epoch: 08 Step:3700 loss:0.057452\n",
      "Train Epoch: 08 Step:3720 loss:0.173443\n",
      "Train Epoch: 08 Step:3740 loss:0.226050\n",
      "Train Epoch: 08 Step:3760 loss:0.000160\n",
      "Train Epoch: 08 Step:3780 loss:0.098054\n",
      "Train Epoch: 08 Step:3800 loss:0.026127\n",
      "Train Epoch: 08 Step:3820 loss:0.064227\n",
      "Train Epoch: 08 Step:3840 loss:0.109086\n",
      "Train Epoch: 08 Step:3860 loss:0.057660\n",
      "Train Epoch: 08 Step:3880 loss:0.175686\n",
      "Train Epoch: 08 Step:3900 loss:0.161925\n",
      "Train Epoch: 08 Step:3920 loss:0.236980\n",
      "Train Epoch: 08 Step:3940 loss:0.023471\n",
      "Train Epoch: 08 Step:3960 loss:0.012572\n",
      "Train Epoch: 08 Step:3980 loss:0.006065\n",
      "Train Epoch: 08 Step:4000 loss:0.121312\n",
      "Train Epoch: 09 Step:4020 loss:0.061933\n",
      "Train Epoch: 09 Step:4040 loss:0.369956\n",
      "Train Epoch: 09 Step:4060 loss:0.000680\n",
      "Train Epoch: 09 Step:4080 loss:0.012570\n",
      "Train Epoch: 09 Step:4100 loss:0.030844\n",
      "Train Epoch: 09 Step:4120 loss:0.000458\n",
      "Train Epoch: 09 Step:4140 loss:0.346914\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Epoch: 09 Step:4160 loss:0.000229\n",
      "Train Epoch: 09 Step:4180 loss:0.116922\n",
      "Train Epoch: 09 Step:4200 loss:0.057452\n",
      "Train Epoch: 09 Step:4220 loss:0.173443\n",
      "Train Epoch: 09 Step:4240 loss:0.226050\n",
      "Train Epoch: 09 Step:4260 loss:0.000160\n",
      "Train Epoch: 09 Step:4280 loss:0.098054\n",
      "Train Epoch: 09 Step:4300 loss:0.026127\n",
      "Train Epoch: 09 Step:4320 loss:0.064227\n",
      "Train Epoch: 09 Step:4340 loss:0.109086\n",
      "Train Epoch: 09 Step:4360 loss:0.057659\n",
      "Train Epoch: 09 Step:4380 loss:0.175686\n",
      "Train Epoch: 09 Step:4400 loss:0.161925\n",
      "Train Epoch: 09 Step:4420 loss:0.236980\n",
      "Train Epoch: 09 Step:4440 loss:0.023471\n",
      "Train Epoch: 09 Step:4460 loss:0.012572\n",
      "Train Epoch: 09 Step:4480 loss:0.006065\n",
      "Train Epoch: 09 Step:4500 loss:0.121312\n",
      "Train Epoch: 10 Step:4520 loss:0.061933\n",
      "Train Epoch: 10 Step:4540 loss:0.369956\n",
      "Train Epoch: 10 Step:4560 loss:0.000680\n",
      "Train Epoch: 10 Step:4580 loss:0.012570\n",
      "Train Epoch: 10 Step:4600 loss:0.030844\n",
      "Train Epoch: 10 Step:4620 loss:0.000458\n",
      "Train Epoch: 10 Step:4640 loss:0.346914\n",
      "Train Epoch: 10 Step:4660 loss:0.000229\n",
      "Train Epoch: 10 Step:4680 loss:0.116921\n",
      "Train Epoch: 10 Step:4700 loss:0.057453\n",
      "Train Epoch: 10 Step:4720 loss:0.173443\n",
      "Train Epoch: 10 Step:4740 loss:0.226050\n",
      "Train Epoch: 10 Step:4760 loss:0.000160\n",
      "Train Epoch: 10 Step:4780 loss:0.098054\n",
      "Train Epoch: 10 Step:4800 loss:0.026127\n",
      "Train Epoch: 10 Step:4820 loss:0.064227\n",
      "Train Epoch: 10 Step:4840 loss:0.109085\n",
      "Train Epoch: 10 Step:4860 loss:0.057660\n",
      "Train Epoch: 10 Step:4880 loss:0.175686\n",
      "Train Epoch: 10 Step:4900 loss:0.161925\n",
      "Train Epoch: 10 Step:4920 loss:0.236980\n",
      "Train Epoch: 10 Step:4940 loss:0.023471\n",
      "Train Epoch: 10 Step:4960 loss:0.012572\n",
      "Train Epoch: 10 Step:4980 loss:0.006065\n",
      "Train Epoch: 10 Step:5000 loss:0.121312\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAAD4CAYAAADFAawfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAA3y0lEQVR4nO3deVxUZfvH8c8NAi5sbqiAKCqugJpYapol5l62uKZmPfW0L/7KyrI0tdza97J9sazHMs01N9z3Ffd9YUBAkWHfZu7fHzMiKgjoDDPg9X69fDnMnHPm8oBfj/fc576U1hohhBDOy8XRBQghhLg6CWohhHByEtRCCOHkJKiFEMLJSVALIYSTq2SPg9aqVUs3bNjQHocWQogKadu2bWe11rULe80uQd2wYUO2bt1qj0MLIUSFpJQ6WdRrMvQhhBBOToJaCCGcnAS1EEI4OQlqIYRwchLUQgjh5CSohRDCyUlQCyGEk5OgFkIIG/jwh4944veP7HLsEgW1UspXKTVbKXVAKbVfKdXRLtUIIUQ5sz96N4PnfsXUBl1ZV6sFB/dG2/w9SnpF/RGwWGvdHGgN7Ld5JUIIUc5M/u49BiQksNqrPXcYNzDz4A80C2ls8/cp9hZypZQPcBvwEIDWOgfIsXklQghRTmzasJrJSUfYFBxJPXMsL0X/ygs9ukL/maCUzd+vJGt9BAOJwPdKqdbANuB5rXV6wY2UUo8BjwEEBQXZuk4hhHC4nJwcJv76MX8EtSe9Sji9zq1hoo4l6MkJ4F7Nbu+riuuZqJSKADYCt2qtNymlPgJStNZvFLVPRESElkWZhBAVyfJ/5/OO6Tw7K4fRIO8kD+9dxRPDnoDaTW1yfKXUNq11RGGvleSKOgaI0Vpvsn49Gxhjk8qEEMLJZWVl8fr/PuOvgFvIreRH//iVTK5fnZrPv2eXYY7CFBvUWuszSqnTSqlmWuuDQCSwz/6lCSGEY/015zc+qarYHxhJSO4RHj+yjeGPvAYeXmVaR0nXo34WmKmUcgeOAQ/bryQhhHCslJRkXlvwHfPqdMIFM4NjljK58+1U6zHgim0zc0zsizOyO8ZISmYez3cPsXk9JQpqrfVOoNCxEyGEqEh+/OVLZtTx42jdboRm7+PZ+FP0f/AVUIqsXBP74lLYY7AEc3SMkcMJqZitH/XVr1GF5yKboGw8JGKXDi9CCFHeJMTH8tqq/7HYvxOVyWLkiUUMan8f+3xv5eU/dxNtSOFQfComayrX8nQnLMCHnqF1CQvwITzQhzrele1SmwS1EOKG99m37/B9g+bE1O5KROZOQnefYXZKa34/eASAGtUsoRzZ3I+wQEso1/WubPMr56JIUAshbii5JjMHz6Syx2DkwJ7tHPU1sCy4Gz6k8NDB+SyJj6B6YAsea2MJ5NAAHwJ8q5RZKBdGgloIUWHlmcwcTkgjOsbIbkMy0YYU9selkJNnYnjdLfwT1pF4l1vpnLaFe7Kr03XQC0yp7thQLowEtRCiQsgzmTmamM7umGTLh30GI/tiU8jOMwPg5VGJ0AAfnmpgYF0dE9943UttcwL/d3Qxrzzq3LeGSFALIcodk1lzLDGN6AuzL6yhnJlrAqCauyutAnwY0aEBYYE+hAX40NBL89ZPH/FVo44kK18ijRt4M6QzIZHOHdIgQS2EcHJms+b4uXTL8EWMkT0GI3tijWTkWEK5ipsroQHeDL05iLBAb8ICfGlUqxouLtbhC61ZM/tjRlX1ZnNIP/xNBp46uZpn//N/DvxTlY4EtRDCaZjNmpNJGReHL2KM7I1NIS07D4DKbi608vdhUET9/ClxjWp74upS+JhyVsweJiyZy+zgzmRQjT7n1vB2h3uo171vWf6xrpsEtRDCIbTWnErKINpgvORqOdUayh6VXGhRz5v7bgogLMCHsEAfmtT2pJJrCZbRz8lgwY+T+Kh+K3Y36kuDvBO8duYAD4941s5/KvuQoBZC2J3WmpjzmfljynsMlnFlY2YuAO6uLrSo50X/tv6WUA7wJaSOJ24lCeXLZOyYw+u7D/F3437kUYl746OY2nskPj7Vbf3HKjMS1EIIm9JaE2vMIjomOf+DvmiDkeQMSyi7uSqa1/WmT1g9wq0f9DWt44V7pets4Zp0nF9/fp8ZLTpzIKgnTXMP8UxKNoOGjLr+P5SDSVALIa6Z1pozKVn5V8kXfj+XbmkCVclF0bSOF71a1c2ffdGsrhcelVxtV0RuFknLpjI22YsFYcNxxcRQw3Im3/skVapVtd37OJAEtRCixOJTsqw3jxiJjrHcQHI2LRsAVxdFiJ8nkS38rGPKvjSv60VlNxuG8uUOL+XruX/zXevuHK8bTFj2Xkabq9Jz+Iv2e08HkKAWQhQqMTWbaEPyJVfLCamWUHZREOLnRdemtS3DF4E+tKznbd9QLij5NKf/fJnx3h1ZctPDVCWDh08t480hz+Lh4VE2NZQhCWohBOfSstltMLIn/2rZyJmULMDSxKRxbU86N6mVP3zR0t+bqu4OiI+8HNjwCR9tPsVPrYdhcA2kfcYOXvNqQMeRo8u+njIiQS3EDeZ8ek7+B3yW+copGJIz819vVLsaHRrVIDTAh/BAX1r6e+Pp4QRRcSyKfX9N4O3GA1nR9kF8MfL0ieW88XDFGuYojBOcfSGEvRgzci2BbLh4A0nM+YuhHFyrGjc1qM5DnRoSFuhDK39vvCq7ObDiQqTEohe/ytT4Ovza9lUSXfzokrqZN+tH0KpbxQ9pkKAWosIwZuay98KVsnX44lRSRv7rQTWq0rq+r2X9iwAfWgX44FPFyUK5IFMubPqSjct+5902I1kb2h4/czyjT0Qx+uFRjq6uTElQC1EOpWblsjc2JX8Gxh6DkeNn0/NfD6xehfBAH4bcXJ/wAF9CA7zxreruwIpL6cQ6zAteYIJLT37vPBEjPnRPXs/b4XfSILKno6srcxLUQji59Ow89samXLJ857HEi6Ec4FuF0ABvBrQLJCzAstB9jWrlKJQLSo2HpW+wJPown0Y8wZaqbQkwxfB87AGefPApR1fnMBLUQjiRjJw89sWmXFz/wmDkaGIa2to8ta53ZcICfbi3TQCh1hkYtTwrwHQ0Ux5s/Za0JW8xKeBx/uwygkyq0O/saqZ2GUSt7v0cXaFDSVAL4SAXOloXXJCoYEfr2l4etA70oV94vfyWUH5e9mme6lCnN8OCF5idWIOvbp5KtEcrgvOO8/TZ8wwf+pyjq3MKEtRClIGsXBMHzqRa7+azBPPhhLRCO1qHW1eKs1dHa6eRfhaWjef81lm8GfIKc2/tjBkX7j+zkml3PYqnp5ejK3QaJQpqpdQJIBUwAXla6wh7FiVEeZadZ+LgmdRLlu88FJ9KnjWUL3S0vrNlHetc5bLtaO1wZhNs/xGWTeB73YXvu3zJIbcQmucc5IUsxd1Dy8+C/mWlNFfUd2itz9qtEiHKoZw8M4fiUy9ZvvPAmRRyTZZQ9q3qRliAD481a2S91doXf58bKJQvZ9gGC14kxrCft1qMYYHfrbiRyzDDCiYPfLpC3v5tCzL0IUQJ5ZrMHI5PI9qQnH+1vD8ulRyTpXmqd+VKhAX68EjnRvnLdwY6YUdrh8hIguUTYdsPfOo5jJ87j+JkpYa0ztrDGLea3DH8BUdX6NRKGtQa+FcppYGvtNYzLt9AKfUY8BhAUFCQ7SoUwgHyTGaOJKZdsiDR/rgrO1o/fGvD/OGLoBpVJZQvZzbDzpmwbDyH0hVTwibxb42OVCWdR08tZ9zQZ3F3L6dTCcuQ0hfm/VxtI6UCtNYGpZQfsBR4Vmu9uqjtIyIi9NatW21YphD2YzJrjiamER1zcf2LfXEpZOVaQrmauyuhAT757aDCA31pUKPqxeaponBxu2HBi+iYzbxb/Ql+a3Ubsa4B3JKxnXE1m9OuQydHV+hUlFLbivr8r0RX1Fprg/X3BKXUHOBmoMigFsJZmc2aY2fTL1m+c29sSn5H66rurrTy9+aBmxvkT4m7pKO1KF6WEVa8DVu+Zkul5nzQZiorvW+huj7PcydX8tpD8mFhaRUb1EqpaoCL1jrV+rgHMNHulQlxncxmzYlz6ZfcPLLXYCTdGsql7WgtiqE17P4D/n2dvPREptR5nt+b3spZFz9uS93EpOCONIuUkL4WJbmirgPMsY69VQJ+1VovtmtVQpSS1pqT5zIuWb5zryHlko7WLf29ud96m3V4oC+Na1crWUdrUbz4fbBwNJxcx3Kf7nzWrjfrPSOoYz7DmFNrGDWyfHb/dhbFBrXW+hjQugxqEaJELnS03h1zcfnO6BgjKVmWUC7Y0To8wJewQB+a+F1bR2tRjOxUiJoKG78gy8ObtwJeYnbjW0nBmx7n1zHlpn4ERPZydJXlnkzPE05Na40hOTP/g76iOlr3a+1v+bDPVh2txdVpDXv/giVjITWOv/xG8G3D9myr0pr6ptOMPnOYR4c/7egqKwwJauE0tNbEGbMuGVPeYzCSVKCjdbO6Fztahwf40rSup207WoviJR6CRS/BsSjO1QplSs2HmRPUiWwqc3fiaqZGPkCNmrUcXWWFIkEtHCY+JYvdMcb89S+iDUbOpllC+UJH6+4t/AgL9CUswMf+Ha3F1eWkw+p3YP2n4FaVn/yf4aegVuzxaEnjvGM8n5zOoEGyiJI9SFCLMpGQmnVx+MJ6tZx4WUfr25v55c9VLtOO1uLqtIYD82Hxq2A8TWyz+5hiDuWfep3QKAbGrWTq3Y9STRZRshsJamFzZ9OyL1mQaI/h0o7WTWp70sXa0To80IcW9RzU0VoU79xRWPQKHFmK9mvJVwGjmVmzBYfdmtAi5wAv53rQ+wGZcmdv8rdDXJekCx2tYy6ufxFrvBjKwbUsHa0vDF+08vemmjN0tBZXl5sJaz+AtR+CqzuHbnmJd1M8WVS7E27k8KBhBZNkEaUyI39jRIklZ+Rcskrc7hgjhuRLO1pHNKyRP3zhlB2tRfEOLYGFL0HyScyt7ufD802Y5daKU34NaJu1m7GV/eksiyiVKQlqUagLHa13548pJ3M66WIoN6hZlTZBvjzYsYE1lJ28o7Uo3vmTlnHogwugVjO23vYen5zPYmmTjniSyuOnVjBhpAS0I0hQC1KzctljSLlk/YsT5zLyX7/Q0Tp//Qt/H3yqSihXGHnZsP5jWP0eKEVu5Dje3ZfFH9qfuBr+dEjfxoS64bSWkHYYCeobTFp2HnsL3DgSHWPk2NlLO1qHBfgw0Lr+RViAD9XLa0drUbwjyy3DHElHoWV/VtbuzVdJRlaF3EENncT/nVrFKyOfd3SVNzwJ6gosIyePvbEplyzfeexsen5H63o+lQkN8OHetgGEWRe6r1kROlqL4hkNsORV2DcXajQmY+ivTFu1k9k1a5Hk1YzbUrcwpfltNIrs7uhKBRLUFUZmzoWO1sn5d/QdSUjL72hdx9uDsAAf7m4dQFigd8XtaC2uLi8HNn4Oq6aDNsEdrzM3oy4/HD7DhpC+1DXHMTZmE888+KSjKxUFSFCXQ1m5JvbHpeQPXUQbLu9o7UF4oA+9Q+vlz8Co8B2tRfGOr4YFo+HsQWjWh+Q7xjJtwT/8GVyfNLzombSO6bf0p05kb0dXKi4jQe3ksvNMHIhLveSOvsNFdLS+EMo3VEdrUbzUM5bFk/bMBt8G6CGzmLnvNDN3bGdHo94EmU7xeuIxHhwqiyg5KwlqJ3Kho/XuGGN+A9WDZ1Kv6GjdrXkjayjf4B2txdWZ8mDzDFg5GUw50PUVTrccwAeL/2Zu/U7k4E7/xFVM7T6c6jVqOrpacRUS1A6Sa7KEcsHlOw9c1tE6PNBXOlqLa3NqIyx4EeL3QJPu6F7T+GrRPP7I2ca+oB40yT3CC2l53DdIZnSUBxLUZSDPZOZwQtolwxf741LIudDRunIlQv0tHa0vzL6QjtbimqQlwtJxsOtX8A6Ewb9w2LsxHy6Zy/yAW1FoBsdFMe2ex6lctYqjqxUlJEFtYxc6WhdcvrOwjtYjOzbIX/9COlqL62Y2wdbvYMUkyMmAzv9HXuf/49OZn/O/oByO+kfSKmc/Y8ye3PnAKEdXK0pJgvo6mMya42etoWy9Wt4bm0Jm7sWO1qH+F+/oCwv0IbimdLQWNhazFRa8AHG7IPg26PMeW5OT+Gre9ywK7o4HWTwUs5IJg56SRZTKKQnqEjKbNcfPpecvRmQJ5Ss7Wg9uX59w6/KdwbWko7Wwo4wkWPYmbP8JvOrCgO/Ibt6XD759lz8bh3O69u3clLmLcZ4N6TBCliItzySoC3Gho/XuAst37jGkkHZZR+sB7QIJlY7WoqyZzbDjZ0tIZxmh49Nw+xiW717Nj/O+ZVlIb7xI5cnTKxn/oAR0RXDDB7XWmtNJmew2JF9yA0nqhY7WlVxoUc/bcpu1dZ5yiJ+nhLJwjNidltkchq0Q1An6vkda9SA++O4DZoe0J776rXRK38qkwHa06iYhXVGUOKiVUq7AVsCgte5nv5LsR2tNzPlMy/BFgVA2Zl7saN2injd3tfYn3BrKTet44SahLBwt8zyseAu2fAvVasG9X0H4YP5eOYvfUtewqtld1DIn8tKpNbw48llHVytsrDRX1M8D+wFvO9ViU1prYo0X+vQlE22wrINxPsMSyhc6WvcJq0tYgGX2hXS0Fk5Ha9j1G/z7BmQmwc2PwR2vcQ4TH3z9Nn817sh5r2Z0M27k7VbdCI6809EVCzsoUVArpQKBvsDbgNMtSqu1Jj4lm90xyZdcLZ9Lv9jRumkdL3q0rEtooA/hAT40k47Wwtmd2QMLR8OpDRDYHvr+ha4bzi//fMVsV3c2hfSjnjmW8bFbeGL4E46uVthRSa+oPwReBpyizXBCStbFKXHWXwU7Wjet48Udzf3y7+hrIR2tRXmSlQJRU2DTV1DFF+7+FNoM4/j5E3zx3VT+Du5EOtXonbSW6R3vp3ZkH0dXLOys2KBWSvUDErTW25RSt19lu8eAxwCCgoJsVR+JqdkXp8RZP/CLT8m2vqe1o3VIrfwx5Zb1fKjiLqEsyiGtYc+flgWU0uKh3UMQOQ5TZR++/v1D/vatzc5GvWmQd5Jx544zfMgzjq5YlBGlL6wiX9QGSk0BRgB5QGUsY9R/aa2HF7VPRESE3rp1a6mLOZeWfcnMi2iDkbgCHa0b1apGeKCvdUqcDy3rSUdrUUEkHLAMc5xYA/5toe97ENCOfXF7mLF0AfMCO5OLG/0SNzC910N4+fg4umJhY0qpbVrriMJeKzbltNavAq9aD3Q7MPpqIX2tcvLMdJiyPH+luOBa1WjfsEb+8EWrAB88JZRFRZOdBqunw4bPwN0T+r4P7R4iV5v57LvJzA1oxP76PQnJPcxLGXD3YFlE6UbkNMnnXsmFyfeGEVC9CqEBPnhXluapogLTGvbPs3T9TjFA2+HQfQJUq8WWoxv4ftMG5jfshgtmhsatZMo9T8giSjewUgW11joKiLJLJcDAiPr2OrQQzuPcUcswx9EVUCcMBnwPQbeQkZvBp19N4u9GrThWrxuh2ft4zbUG3R6QG1dudE5zRS1EhZeTAWveg/UfQ6XK0GsatH8UXCuxdOdCZh0+zJKQXlQmi0diVjJ+8NO4u0sHeCFBLUTZOLAQFr8CyacgfDDcOQm86mDMNvLpjA+ZE3ITMbW6EpG5k/G+TWgviyiJAiSohbCnpOOweAwcWgy1W8BDC6BhZ7TW/Ll6Jn+fNbK8WT98MPLsqVWMHSkfFoorSVALYQ+5WbDuI1j7PihXyxV0hyfB1Y349Hg+/+kL5jTtSEL1VnRO28JbDdrTvJuEtCicBLUQtnZ4meXDwvPHodW90ONt8AnArM38vPAL5ue5sqb5PdQ2JzDm9DpGPSjdv8XVSVALYSvJp2HJq7D/H6jZBEb8DY3vAOB48nG+/uMX5jTuRHJlXyKNG5jaujf1I3s4tmZRLkhQC3G98nJgw6ew+h3L/OjIcdDxGajkQa45l29mf8iiarXYHHIX/iYDL5zZzn+HPenoqkU5IkEtxPU4FgULRsO5w9C8H/SaAr6WtW52xe7kl8UL+bthZzKoSt+ktUzvMoiafn6OrVmUOxLUQlyLlFjL4kl7/4LqwTBsNoRY1oLOysvi81/eYXHdYHYH96Fh3gkmJp9k6EBZRElcGwlqIUrDlGtZfjRqiuXx7a/CraPArTIA64+v5fc165kXFIkJV+6PX8W0fv/B09MpVggW5ZQEtRAldWKdZTZHwj4I6Qm9p0GNYABSc1L57Pt3WBQcysH6PWiWe4iXs93oO0Sm3InrJ0EtRHFS42HpG7D7d/AJgiG/QrM+lrV3gSXRC5iz5yALQ/riiolhcSuZfP9TeHh4OLhwUVFIUAtRFFMebP3W0lQ2NxO6vAhdRoN7VQDOZp7ly+8/ZEFIO47X7UZ49h7GutelqyyiJGxMglqIwpzeDAtegDPR0OgO6PMu1GoCWHp0/m/jLywynOff5vdQlQz+GxPFG4OfkkWUhF1IUAtRUPpZWDYedvwCXv4w8AdoeU/+MIchzcDXP37BvGYdia0ZRvuMHUyo3ZybRoxyZNWigpOgFgLAbILtP8KyCZCTBp2eg66vgIcnACaziR+Xf8myNBdWtrgXX4w8d3o1rz34nIMLFzcCCWohDNthwYsQux0adIa+74Jfi/yXD58/zI+//czcZp1J9PWjS+pmJjfuREg3CWlRNiSoxY0rIwlWTIKt34OnH9z3DYQNyB/myDHlMGPuB0S51WBti/vwM8czNmY9z454ysGFixuNBLW48ZjNsOtXWDoOMpMty4/ePgYqX+zsvTN+B7///Q9zQjpjxIc7k9cztU0fAiJ7Oq5uccOSoBY3lrjdlptWTm+C+h0swxx1w/JfzsjN4PNZ04mq2ZCtTe8mwBTDy4nH+c9QuYoWjiNBLW4MWUZY8TZs+Rqq1ID+n0ProeDikr9J1NGV/LNqA3MbRpJJFe46t4aptw+hZq3aDixcCAlqUdFpDbv/gH9fh/REaP8IdHsdqlTP3yQ5K5nPfp5OVP1WRAf3oVHeMZ5PyWLwgGcdWLgQF0lQi4orYb9lCdKTayGgHQz7A/zb5r+steaffXNZuv0w/zTuhxkXBsavYspdj+BZzdOBhQtxqWKDWilVGVgNeFi3n621Hm/vwoS4ZtmpEDUVNn0JHl7Q70O4aeQlwxxn0s8w44cPWBYSwaHAO2mec5BXTB70lkWUhBMqyRV1NtBNa52mlHID1iqlFmmtN9q5NiFKR2vYOweWvAapcXDTgxD5JlSrmb+JWZv5ddOPrDmRzMIW9+NGLg/GruStgU/L7d/CaRUb1FprDaRZv3Sz/tL2LEqIUjt72DKb41gU1A2HQT9D/faXbHLceJzvf/6KJc06crJOW1pn7eH1yv50GSaLKAnnVqIxaqWUK7ANaAJ8prXeZNeqhCipnHRY/S6s/wTcqloWT4r4D7i45m+Sa87l25WfsfG8K0tbDqAa6TxxehVjhz6Fm5ubA4sXomRKFNRaaxPQRinlC8xRSoVqrfcU3EYp9RjwGEBQUJCt6xTiUlrDgQWweAwYT1um2t050XKHYQF7z+3lt99msqBFZ+Jq+tMhYzsT6oTR+kEZixblR6lmfWitk5VSK4FewJ7LXpsBzACIiIiQoRFhP0nHYOHLcGQp+LWEhxdBg06XbJKZl8mX899jMzWJajmA6vo8L8Ss5eUR0rdQlD8lmfVRG8i1hnQV4E5gmt0rE+JyuZmw9kNY+wG4ukHPyXDzY5bHBWyO28zfc+Yzr1kXzrrUpmvKJiY370rjyEjH1C3EdSrJFXU94EfrOLUL8IfWer59yxLiMoeWwKKX4fwJCB0APd4C73qXbJKSk8Ln/5vGZu9g1re4jzrmM7xh2MTTwx93TM1C2EhJZn3sBtoWt50QdnH+JCx+FQ4ugFpN4cF50KjrFZstP7mMJUvWM7fJnaTiRc/z65h6c3/qRfZyQNFC2JbcmSicU142rP8YVr9nWXa0+5vQ4WmodOlc57OZZ/l85jQ2+oeyPeRu6ptO8drZE4wc8rRj6hbCDiSohfM5ugIWvgTnjkCLu6HXFPAJvGQTrTWzo//H+m1HmdeoP9l4cPfZ1UztPowa1WsWcWAhyicJauE8jAbLXYX7/oYajWD4n9Ck+xWbnU49zTc/f8Daxu3Z27A3jfOO8mKaifsGSscVUTFJUAvHM+XCxs8hahpoE9zxOnR6FtwqX7qZ2cQP275jx0Ej85sPRKMYHB/FtLsfp3LVKg4qXgj7k6AWjnV8jeXW78QD0LQ39J4K1Rtesdmh84f4+ZcvWdmsE0cC2tMi5wBjtCc9h4wq85KFKGsS1MIxUs9Y1oiO/h/4BsHQWdCs9xWb5Zhy+GL1R+xJqMTiVkNwI4eHYqOYOPApWURJ3DAkqEXZMuVZuqysnAx5WXDby9DlBXC7cuhiZ8JOZv82k39bdeGUXxBts3YzzqsBHYeNKvu6hXAgCWpRdk5thAUvQvweaBwJfd6Bmo2v2Cw9N51PFr/D/pxaLA0bgiepPBmzivEjZH0OcWOSoBb2l5Zo6fi961fwDrQsQdriLsv86MusiVnD4jkLWdDyNs541qNj+jYm+bcltJuEtLhxSVAL+zGbYOt3sGKSZTnSW0dB15fBvdoVm57POs+H8yZz0KMxq1oNpIY+x+iYdYweITeuCCFBLewjZhsseAHidkLwbZZ1oms3u2IzrTULjy1gzZIt/NOsJ0mqBl1TtzC11R00jLyz7OsWwglJUAvbykiCZW/C9p/Asw7c/y2E3l/oMMeZ9DN88vtk9vq1ZmOLe6lnjmVc7FaelEWUhLiEBLWwDbMZdvxsCeksI3R8Grq+ApW9r9xUm5m1bxY71h9lbuP7SMOLXufXMb3DffhF9in72oVwchLU4vrF7rTM5jBshaBO0PddqNOq0E2PGY/x9W/vs7PBzexochdBplOMSzrJ8EEyFi1EUSSoxbXLTIYVb8HWb6FqTbj3KwgfXOgwR645l6+3zODw/lTmNh1CLu7ck7iad3o9hJf3lVfdQoiLJKhF6WkNu2bB0jcg4xy0fxTuGAtVfAvdfO/Zvfzy2xdsbNqZ/Q1upUnuEV7M0Nw7SBZREqIkJKhF6cTvtQxznNoAge1h2Gzwb1Poppl5mXy65n2Ox3qwoNVwFJohZ6KY2l8WURKiNCSoRclkpUDUVNj0JVT2gbs/gTbDwcWl0M03xW1i7u8zWdWqK0f9G9MqZz+vuVYncuiosq1biApAglpcndaw509YMhbS4qHdSIgcD1VrFLq5MdvIB8unE5NWm8XhI/Agi4cNUUwYJIsoCXGtJKhF0RIPWoY5TqyBem1gyK8Q2K7IzZedXMaKOYtYGno7p2vXp13mLsZVb8Itw0eVWclCVEQS1OJK2Wmwejps+Mxyu3ff96Ddw+DiWujmiRmJvD//LWIqNWV5+AN4kcozMat5fYR8WCiELUhQi4u0hv3zLF2/UwzQZhh0nwCetYvYXDPnyBy2LN7Cwpa9iXepS6f0rUwKjKBVNwlpIWxFglpYnDtqaSh7dDnUCYUB30FQhyI3P51ymo/+fJtTNduyOnQwtcyJvByznhdGPFWGRQtxYyg2qJVS9YGfgDqABmZorT+yd2GijORkwNr3Yd1HUKky9JpmmRftWviPRp45j1/2/syBtcdZ2HQg51V1uhk3MiW8Jw1kESUh7KIkV9R5wIta6+1KKS9gm1JqqdZ6n51rE/Z2cBEsehmST0HYIOgxCbzqFr150kG+/N87HAvsxKbm9+FvMjAxfhv/feCJMixaiBtPsUGttY4D4qyPU5VS+4EAQIK6vDp/Aha9AocWQ+3mMHI+BHcpcvNsUzafb/oMw94M5oeMIINq9Elax7TOA6ldx6/s6hbiBlWqMWqlVEOgLbDJLtUI+8rNgvUfw5r3QLnCnZOgw5Pg6lbkLtvjtzPz9y/YE9KVXU1CaZB3kgnG0zwwQBZREqKslDiolVKewJ/AKK11SiGvPwY8BhAUFGSzAoWNHF4Gi16CpGPQ6l7o8Tb4BBS5eVpOGh+se4ezJ6vwT+hD5OLGvYmrmd77Yby8vMqwcCFEiYJaKeWGJaRnaq3/KmwbrfUMYAZARESEtlmF4vokn4Ylr8L+f6BmExgxBxp3u+ouq2NWM2/2TLa27MaBBs0IyT3My9mu3CWLKAnhECWZ9aGAb4H9Wuv37V+SsIm8HNjwKax+xzI/utsb0OlZqORR5C5JWUlMj3oLY1IAC8IfxgUzw+KimHzfE3hUrlyGxQshCirJFfWtwAggWim10/rca1rrhXarSlyfY6tg4Wg4ewia94Oek6F6gyI311oz/9h81s77l9Wh3TheL5iw7L2M9fDj9gdGlV3dQohClWTWx1rgypXghfNJiYV/X7csolS9ITzwBzTtedVdYtNimbpoIum0YHHrkVQhk0cNqxg36ElZREkIJyF3JlYEplzY9BVETbE87joGOo8Ct6LXfDZrM7MOzGL3ku2sC+2HwTWQiMydTKjZnHbDny+72oUQxZKgLu9OrLMMcyTsg5Ae0Hsa1Gh01V2OJR/jvXmTSPZqz4rwofhg5NmY1YyVRZSEcEoS1OVVWgL8+wbsngU+QZYlSJv1KbRf4QW5ply+jf6GE2tOsablEBJc6tA5bQtvN+5Es25XnwkihHAcCeryxpQHW7+zNJXNzYAuL0KX0eBe9aq7RSdG88Wc6STU7cLa0MH4meN51bCB54c/WUaFCyGulQR1eXJ6Myx4Ac5EQ6Pboc+7UCvkqrtk5Gbw6Y5POLctg5XNHiYZH7obNzC1bV8CI6/+QaMQwjlIUJcH6edg2TjY8Qt4+cPAH6DlPVcd5gDYELuBmX9+zslG3djSvC0BphhGJx7nkaFyFS1EeSJB7czMJtj+IyybADlplhtWur4CHle/hduYbeTdddPIOF6NJa3+SwZV6XtuLdNvH0LNWrXKqHghhK1IUDsrw3ZLv8LY7dCgM/R9F/xaXHUXrTVLTy5l4Zzf2NuiO9GNWhGcd5znUwwMGfBMGRUuhLA1CWpnk5EEKybB1u+hWm2472sIG1jsMEdCRgKToyZgPtuAf1r/FxOuDEhYxdR+j+BZzbOMihdC2IMEtbMwm2HXr7B0HGSeh1sehzteg8o+V91Na82fh/9kw/ylbA+N5FD9pjTLPcTLeR70HSw3rghREUhQO4O43ZabVk5vgvq3WLp+1w0rdrdTKad4e+k4VE44C9v8B1dMjIiL4u0BT8nt30JUIBLUjpRlhJWTYfMMqFId+n8GrR8AF5er7pZnzuOnfT+x/98d7Aq7hxOVGhKevYfXq9TjNllESYgKR4LaEbSG6P9ZFlBKS4CI/0C316FqjWJ3PZB0gGnzJ0DVTvzbZiRVSecxwypel0WUhKiwJKjLWsJ+WDAaTq4F/5tg6CwIuKnY3bJN2Xy560viVp1iV9hwYl0DuDljBxPrtKJNNxmLFqIik6AuK9mpsGoabPwC3D2h34dw04Pg4lrsrlvPbOWzedPJ9ruDla2H4avPMypmDWNGPGv/uoUQDidBbW9aw945sGQspMZC2xHQfQJUq1nsrmk5aXyw9X3St2WyteWjJLr4cVvqZiY37UKTyMgyKF4I4QwkqO3p7GHLbI5jUVA3HAb9BPXbl2jXqNNR/PT3FxgbdmddaHv8zPG8btjEM8Mft2vJQgjnI0FtDznpsPpdWP8JuFWF3u9A+0dKNMxxLvMc0zZOhUOerG/1BEa86ZG8nmk33009WURJiBuSBLUtaQ0HFsDiMWA8DeFDoMck8PQrwa6WvoUL/plJTNNebG3ahgBTDK+cO8nDg58qg+KFEM5KgtpWko7Bolfg8L/g1xIeWggNby3RrrFpsUyMGk/VhGCWhj9NNpW56+wapnZ7gJo1ix/LFkJUbBLU1ys3E9Z+CGs/AFc36PG25fZvV7didzWZTcw6OIuNC//lSKue7AluSaO8Y/xfWi4DB8qMDiGEhQT19Tj0Lyx6Cc6fgND7LSHtXa9Eux5NPsqEFa/hnR7B/LaPY8aFgfGrmHrXI1STRZSEEAVIUF+L5FOwaAwcXAC1msKDcy0dV0og15TLN9HfcHjZDo6HD+Bw9RBa5BxgjPak5xC5cUUIcaVig1op9R3QD0jQWofavyQnlpdtmcmx+l3LsqPd34QOT0Olkt26vTtxN1OWvIl3pS4svOlR3Mjlwdgo3hooiygJIYpWkivqH4BPgZ/sW4qTO7oCFr4E545Ai7ug5xTwrV+iXTNyM/hkxyecW2vgaPhITrk2oE1WNK971qfzsFH2rVsIUe4VG9Ra69VKqYZlUItzMhpgyWuw72+oHgzD/oSQ7iXefb1hPR8vmkJl3x4sbfMg1UjnCcNqxg5+Eje34j9wFEIIm41RK6UeAx4DCAoKstVhHceUCxs/h6hpoE1wx1jo9By4VS7R7sZsI9O3TMe8NZuDYU8S5+JPh4ztTPRvQ3i35+xcvBCiIrFZUGutZwAzACIiIrStjusQx9dYbv1OPABNe0GvqVAjuES7aq1ZcnIJPy78HPx7ExV+CzV0Ei8Y1vHy8KftXLgQoiKSWR8FpZ6Bf9+A6D/AN8iyBGmz3iXePT49nrc2TqLafl+iWzzLWZfadE3ZzNSWdxAcWfLhEiGEKEiCGsCUB1u+tnRbycuC216Czi+Ae9US7W7WZmYfms2Cxb+S0qgfG1pFUMd8hjdiN/H0MFlESQhxfUoyPe834HagllIqBhivtf7W3oWVmVMbYcGLEL8HGkdCn3egZuMS737CeIIJ696k9ulGbAwbRSpe9Dy/jukd76NOZC87Fi6EuFGUZNbH0LIopMylJcKy8bBzJngHWJYgbXG3ZX50CeSac/lx749s/vdf4lv2ZVHT1tQ3neK1pJOMHCRj0UII27nxhj7MJtj2PSyfaFmO9NZRlqEOj5Lftr3v3D4mrHwD/9QIlrd9jhzc6X92NVO7D6d69eL7HgohRGncWEEdsw0WvABxO6FhF+j7HtRuVuLds/Ky+GLXFxxbuZ3EsAGsqtmCxnlHGZ2puXegTLkTQtjHjRHUGUmwfAJs+xE868D931oWUSrhMAfAljNbeHvFmwTo25l/k2VoY/CZVUy/53E8qpRsbrUQQlyLih3UZjPs+BmWvQlZRujwFNw+Bip7l/gQqTmpfLDtA4zrYkhs/R82VmpMy5z9jFG+9BgqiygJIeyv4gZ13C7LbI6YLRDUEfq8C3VLt6bUylMr+fDfqfh59WbxTY/iTg4PxUYxURZREkKUoYoX1JnJsPJt2PINVK0J93wJrYeUapjjbOZZpm6eiuvWXOJaP80m1yBuytrFOJ/GdJBFlIQQZaziBLXWsGsWLH0DMs5BxCPQ7XWo4luKQ2jmHZ3HD0s/xcuvP8vadsSTVJ6KWc24EfJhoRDCMSpGUMfvtQxznNoAAREwbDb4tynVIQxpBiaun0CN/b4cD32BMy716JS+jUlB7WkliygJIRyofAd1VgpETYVNX0JlH7jrY2g7AlxcSnwIk9nErwd+Zf6yX6HBPcwNv4Wa5kRGG9YxWhZREkI4gfIZ1FrDnj9hyVhIi4d2IyFyPFQt3c0mh88f5s1146l/sjF7Wr1IkqrBHSmbmBIWScPIO+1UvBBClE75C+rEg5YlSI+vhnqtYcivENiuVIfIMeXwdfTXbFy+hLTm9/BDy5uoZ45lXPw2nhwqiygJIZxL+QnqnHRYNR02fGZZ1a7ve9DuYXBxLdVhdibsZMKa8TQ5F8Gmti+STjV6nV/H9I734xfZx07FCyHEtXP+oNYa9s+Dxa9BSgy0GQbdJ4Bn7VIdJiM3g493fMzRVdvJDB3AzzXCCDKdZFzyaYYPkLFoIYTzcu6gPnfU0lD26HKoEwr3fwMNOpb6MOsM63hr5Zs0y4tkebvnyMWdexLX8E6vkXh5l/wuRSGEcATnDOqcDFj7Pqz7CFw9LK2w2v8XXEtXbnJWMtO3TCdtg4Gs1o8wy705IblHeCnHhbsHPWun4oUQwracL6gPLoJFL0PyKQgbCD3eAq+6pTqE1prFJxbzftQ0mrr345+Iu3FBM+TMKqbJIkpCiHLGeYI6ywh/PQ6HFkGtZjDyHwi+rdSHOZN+hrc2voXH9jwy2jzHn5UaEZq9j1fdaxEpiygJIcoh5wlqdy/IzYA7J8ItT0Kl0i16dKFv4XcrPyWwxv383a4THmTxiGEV4wc9KYsoCSHKLecJahcXeHBuqRZPuuCE8QRvbniTunt9Odv6JXa61qdd5i4m1GxKxHC5ihZClG/OE9RQ6pC+0LdwbtRMfAMG8GPbDviQwjOG1bw+XNbnEEJUDM4V1KWw99xe3lw3nibHm3Aq9BW2uNTl1vStvB3cgeayiJIQogIpd0GdmZfJFzu/YP3qJagm9/F9+C3UMicwJnYDo4Y96ejyhBDC5spVUG+O28yEdeMJTWjPvtYvc15VJ9K4kclte9EgsoejyxNCCLsoUVArpXoBHwGuwDda66l2reoyKTkpvL/1fY6t245ry4H82OIm/E0GJibs4L9DnyjLUoQQoswVG9RKKVfgM+BOIAbYopSap7XeZ+/iAJafWs7kVZNom92dDe1eJINq9Elay7Qug6ntV7r1PoQQojwqyRX1zcARrfUxAKXULKA/YNegPpt5lsmbJpO+xYBr2KP84hFKg7wTTEg18MD9z9jzrYUQwqmUJKgDgNMFvo4Bbrl8I6XUY8BjAEFBQddckNaav4/8zQdr36GtS3+WtrufXNy4L3E10/v8B09Pz2s+thBClEc2+zBRaz0DmAEQERGhr+UYp1NPM3HDRKrtzMOlzfP87taMprmHecXkTt9BMuVOCHFjKklQG4D6Bb4OtD5nU8ZsIyN/H0KzqvfzV8StuGBi2JlVTL73cTwqyyJKQogbV0mCegsQopQKxhLQQ4AHbF1IzJ5DZDYYzZxKwYRl72Wshz+3yyJKQghRfFBrrfOUUs8AS7BMz/tOa73X1oWEhLWm1tI9RCasYtxAWURJCCEuKNEYtdZ6IbDQnoW4u7vzT9+H7fkWQghRLrk4ugAhhBBXJ0EthBBOToJaCCGcnAS1EEI4OQlqIYRwchLUQgjh5CSohRDCyUlQCyGEk1NaX9P6SVc/qFKJwMlr3L0WcNaG5diK1FU6UlfpSF2lUxHraqC1LnSRfbsE9fVQSm3VWkc4uo7LSV2lI3WVjtRVOjdaXTL0IYQQTk6CWgghnJwzBvUMRxdQBKmrdKSu0pG6SueGqsvpxqiFEEJcyhmvqIUQQhQgQS2EEE7OIUGtlBqolNqrlDIrpYqcyqKU6qWUOqiUOqKUGlPg+WCl1Cbr878rpWzSDkYpVUMptVQpddj6e/VCtrlDKbWzwK8spdQ91td+UEodL/Bam7Kqy7qdqcB7zyvwvCPPVxul1Abr93u3Umpwgddser6K+nkp8LqH9c9/xHo+GhZ47VXr8weVUj2vp45rqOsFpdQ+6/lZrpRqUOC1Qr+nZVTXQ0qpxALv/2iB10Zav++HlVIjy7iuDwrUdEgplVzgNbucL6XUd0qpBKXUniJeV0qpj60171ZK3VTgtes/V1rrMv8FtACaAVFARBHbuAJHgUaAO7ALaGl97Q9giPXxl8CTNqprOjDG+ngMMK2Y7WsASUBV69c/AAPscL5KVBeQVsTzDjtfQFMgxPrYH4gDfG19vq7281Jgm6eAL62PhwC/Wx+3tG7vAQRbj+NahnXdUeBn6MkLdV3te1pGdT0EfFrIvjWAY9bfq1sfVy+rui7b/lks7QHtfb5uA24C9hTxeh9gEaCADsAmW54rh1xRa633a60PFrPZzcARrfUxrXUOMAvor5RSQDdgtnW7H4F7bFRaf+vxSnrcAcAirXWGjd6/KKWtK5+jz5fW+pDW+rD1cSyQABR699V1KvTn5Sr1zgYireenPzBLa52ttT4OHLEer0zq0lqvLPAztBEItNF7X1ddV9ETWKq1TtJanweWAr0cVNdQ4DcbvXeRtNarsVyUFaU/8JO22Aj4KqXqYaNz5cxj1AHA6QJfx1ifqwkka63zLnveFuporeOsj88AdYrZfghX/pC8bf2vzwdKKY8yrquyUmqrUmrjheEYnOh8KaVuxnKVdLTA07Y6X0X9vBS6jfV8GLGcn5Lsa8+6CnoEy5XZBYV9T8uyrvut35/ZSqn6pdzXnnVhHSIKBlYUeNpe56s4RdVtk3NVoua210IptQyoW8hLY7XWc+31vsW5Wl0Fv9Baa6VUkXMXrf9ahmHpzn7Bq1gCyx3LfMpXgIllWFcDrbVBKdUIWKGUisYSRtfMxufrZ2Ck1tpsffqaz1dFpJQaDkQAXQs8fcX3VGt9tPAj2Nw/wG9a62yl1ONY/jfSrYzeuySGALO11qYCzznyfNmN3YJaa939Og9hAOoX+DrQ+tw5LP+tqGS9Krrw/HXXpZSKV0rV01rHWYMl4SqHGgTM0VrnFjj2havLbKXU98DosqxLa22w/n5MKRUFtAX+xMHnSynlDSzA8o/0xgLHvubzVYiifl4K2yZGKVUJ8MHy81SSfe1ZF0qp7lj+8euqtc6+8HwR31NbBE+xdWmtzxX48hssn0lc2Pf2y/aNskFNJaqrgCHA0wWfsOP5Kk5RddvkXDnz0McWIERZZiy4Y/mmzNOWEfqVWMaHAUYCtrpCn2c9XkmOe8XYmDWsLowL3wMU+gmxPepSSlW/MHSglKoF3Arsc/T5sn7v5mAZv5t92Wu2PF+F/rxcpd4BwArr+ZkHDFGWWSHBQAiw+TpqKVVdSqm2wFfA3VrrhALPF/o9LcO66hX48m5gv/XxEqCHtb7qQA8u/Z+lXeuy1tYcy4dzGwo8Z8/zVZx5wIPW2R8dAKP1QsQ258oen5AW9wu4F8tYTTYQDyyxPu8PLCywXR/gEJZ/EccWeL4Rlr9IR4D/AR42qqsmsBw4DCwDalifjwC+KbBdQyz/Urpctv8KIBpL4PwCeJZVXUAn63vvsv7+iDOcL2A4kAvsLPCrjT3OV2E/L1iGUu62Pq5s/fMfsZ6PRgX2HWvd7yDQ28Y/78XVtcz69+DC+ZlX3Pe0jOqaAuy1vv9KoHmBff9jPY9HgIfLsi7r128CUy/bz27nC8tFWZz1ZzkGy2cJTwBPWF9XwGfWmqMpMJvNFudKbiEXQggn58xDH0IIIZCgFkIIpydBLYQQTk6CWgghnJwEtRBCODkJaiGEcHIS1EII4eT+Hw+sYcSvcYBGAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "#训练步数\n",
    "print_step = 20# 20个样本显示瞬时\n",
    "step = 0\n",
    "loss_list = []   #初始化空列表，用于保存损失值\n",
    "\n",
    "for epoch in range(train_epochs):\n",
    "    for xs,ys in zip(x_data,y_data):\n",
    "#         _,loss = loss(xs,ys,w,b)\n",
    "        loss_ = loss(xs,ys,w,b) #计算损失\n",
    "#         sess.run([optimizer,loss_function],feed_dict={x:xs, y:ys})\n",
    "        loss_list.append(loss_)     #将损失函数值增加到列表末端\n",
    "        delta_w,delta_b = grad(xs,ys,w,b)\n",
    "        change_w = delta_w * learning_rate\n",
    "        change_b = delta_b * learning_rate\n",
    "        w.assign_sub(change_w)\n",
    "        b.assign_sub(change_b)\n",
    "        step += 1     #步长加1\n",
    "        if step % print_step == 0:\n",
    "            print(\"Train Epoch:\",'%02d' %(epoch+1),\"Step:%03d\" % (step),\"loss:%.6f\"%(loss_))\n",
    "            \n",
    "    plt.plot(x_data, w.numpy()*x_data+b.numpy())\n",
    "\n",
    "            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "59d48de0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "w: 3.0944626\n",
      "b: 2.9838445\n"
     ]
    }
   ],
   "source": [
    "\n",
    "print(\"w:\",w.numpy())\n",
    "print(\"b:\",b.numpy())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "656820d3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1ad067e7d88>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "plt.scatter(x_data,y_data,label='Original data')\n",
    "plt.plot(x_data,y_data*w.numpy() + b.numpy(),label='Fitted line',color='r',linewidth=3)\n",
    "plt.plot(x_data,y,label='object line',color='g',linewidth=3)\n",
    "plt.legend(loc=2)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "a826a069",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1ad067c7448>]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(loss_list,'r+')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5aa3c442",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "预测值：20.900783539\n",
      "目标值：21.064486000\n"
     ]
    }
   ],
   "source": [
    "\n",
    "    #6.通过训练出的模型预测 x=5.79 时 y 的值\n",
    "x_test = 5.79\n",
    "\n",
    "predict = model(x_test,w.numpy(),b.numpy())\n",
    "print(\"预测值：{:.9f}\".format(predict))\n",
    "\n",
    "target = 3.1234 * x_test + 2.98 \n",
    "print(\"目标值：{:.9f}\".format(target))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "e5b93eda",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<bound method _ResourceSummaryWriter.close of <tensorflow.python.ops.summary_ops_v2._ResourceSummaryWriter object at 0x000001AD03331888>>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "\n",
    "# \"\"\"\n",
    "# 进行训练\n",
    "# \"\"\"\n",
    "# 最后将统计信息写入日志\n",
    "with writer.as_default():\n",
    "    tf.summary.trace_export(name=\"model_trace\", step=0, profiler_outdir=logdir)    # 保存Trace信息到文件\n",
    "# writer=tf.summary.FileWriter(logdir, tf.get_default_graph())\n",
    "writer = tf.summary.create_file_writer(logdir)\n",
    "writer.close\n",
    "# with writer.as_default():\n",
    "#     tf.summary.trace_export(name=\"model_trace\", step=0, profiler_outdir=log_dir)    # 保存Trace信息到文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6044952a",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
